

import java.util.ArrayList;

public class Navette extends Thread{

	/**
	 * le nombre de place maximun dans la navette
	 */
	int nbMaxPassage;
	
	/**
	 * nombre festivalier presents dans la navette
	 */
	int nbPassage;
	
	boolean asPrisPassage = true;
	/**
	 * le circuit à parcourir
	 */
	Circuit circuit;
	
	/**
	 * Constuit une navette qui est un Thread daemon. Elle s'arrete dès que
	 * que le dernier festivalier descend de la navette
	 * @param circuit : le circuit à parcourir
	 * @param nbMax : le nombre de place maxi
	 * @param nom ; un nom pour distinguer le Thread
	 */
	public Navette (Circuit circuit, int nbMax , String nom){
		super(nom);
		this.circuit = circuit;
		this.nbMaxPassage = nbMax;
		setDaemon(true);
	}
	
	/**
	 * charge la navette
	 * @param nb : le nombre de festivalier à embarquer
	 */
	public synchronized void prendrePassages(int nb){
		nbPassage += nb ;
		System.out.println(getName() + " prend passagé, "+getNbPlaceDispo() +" places disponibles");
	}
	
	/**
	 * Decharge la navette
	 * @param nb : le nombre de festivalier à debarquer
	 */
	public synchronized void descendrePassages(int nb){
		nbPassage -= nb ;
		System.out.println(getName()+ " dechargement" +getNbPlaceDispo() +" dispo");
	}
	
	//action d'une navette
	@Override
	public void run() {
		while (true){
			//si la navette effectue un tour complet sans rencontrer de passage 
			//elle s'arrete
			if(!asPrisPassage){
				System.out.println(getName() + " n'a pas rencontrer de passagé");
				return;
			}
				
			//parcours du circuit
			for(int i = 0 ; i<circuit.sites.size() ; i ++){
				System.out.println(getName() + " : sur le site "+ circuit.sites.get(i).nom +" " + i);
				
				//pour chaque site effectue l'action lui correspondant
				
				
				circuit.sites.get(i).actionNavette(this);
			}
			 
			
		}
	}

	public int getNbPassage() {
		asPrisPassage = true ;
		return nbPassage;
	}
	
	
	public int getNbPlaceDispo() { 
		asPrisPassage = false ;
		return nbMaxPassage - nbPassage;
	}
}
